home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / ada / gwuada_5.zip / adaed / nyudemos / random.ada < prev    next >
Text File  |  1992-09-01  |  2KB  |  50 lines

  1.  
  2. ----------------------------------------------------------------------
  3. --
  4. --                 Random Number Generator
  5. --
  6. --                      written by
  7. --
  8. --                     David Shields
  9. --
  10. --                      Ada Project
  11. --                   Courant Institute
  12. --                  New York University
  13. --                   251 Mercer Street
  14. --                New York, New York  10012
  15. --
  16. -----------------------------------------------------------------------
  17.  
  18. package random_numbers is
  19.     rand_seed: integer := 1;
  20.     function random_int(r: integer) return integer;
  21.     -- returns random integer in the range 0 ..(r-1).
  22.     procedure set_seed(r: integer); -- set random seed
  23. end random_numbers;
  24.  
  25. with calendar; use calendar;
  26. package body random_numbers is
  27.     function random_int(r:integer) return integer is
  28.          rvar: float;
  29.     begin
  30.         -- the values used for random number generation avoid overflow
  31.         -- on 16 bit (and larger) machines.
  32.     -- The values are as given in Gimpel, Programming in SNOBOL.
  33.         rand_seed := (rand_seed * 59) mod 491;
  34.         rvar := float(rand_seed) / 491.0;
  35.         -- assume machine rounds, so use r-1
  36.         return integer(rvar * float(r-1));
  37.    
  38.     end;
  39.  
  40.     procedure set_seed(r: integer) is
  41.     begin
  42.         rand_seed := r;
  43.     end;
  44.  
  45. begin
  46.     -- set initial value from clock (avoid overflow if 16 bit integers)
  47.     rand_seed := integer(float(seconds(clock)) / 200.0 ) ;
  48. end random_numbers;
  49.  
  50.